﻿using System.Collections.Generic;

public static class EventManager
{
    //消息委托
    public delegate void MsgEvent(MsgBase msg);
    //消息字典
    public static Dictionary<string, MsgEvent> msgDic = new Dictionary<string, MsgEvent>();
    //消息列表
    public static List<MsgBase> msgList = new List<MsgBase>();
    //处理消息数量
    public static int msgNum=0;
    //添加消息字典
    public static void AddMsgDic(string msg,MsgEvent e)
    {
        if (!msgDic.ContainsKey(msg))
        {
            msgDic.Add(msg, e);
        }
        else
        {
            msgDic[msg]+=e;
        }
    }
    //移除消息字典
    public static void ReMsgDic(string msg,MsgEvent e)
    {
        if(msgDic.ContainsKey(msg))
        {
            msgDic[msg]-=e;
            if (msgDic[msg]==null)
            {
                msgDic.Remove(msg);
            }
        }
    }
    //添加消息
    public static void AddMsg(MsgBase msg)
    {
        msgList.Add(msg);
        msgNum++;
    }
    //移除消息
    public static void ReMsg(MsgBase msg)
    {
        msgList.Remove(msg);
    }
    //发送消息
    public static void FireMsg(MsgBase msg)
    {
        if(msgDic.ContainsKey(msg.proName))
        {
            msgDic[msg.proName](msg);
        }
    }
    //驱动
    public static void Update()
    {
        if (msgNum<=0) return;
        
        for(int i=0;i<10;i++)
        {
            if (msgList.Count<=0) return;
            MsgBase msg = null;
            msg=msgList[0];
            msgList.RemoveAt(0);
            if (msg!=null)
            {
                FireMsg(msg);
                msgNum--;

                if(msgNum<=0)
                {
                    break;
                }
            }
            else
            {
                msgNum=0;
                break;
            }
        }
    }
}